


\chapter{INTRODUÇÃO}
%\addcontentsline{toc}{chapter}{INTRODUÇÃO}
\thispagestyle{empty}

%\addcontentsline{toc}{chapter}{INTRODUÇÃO} 
%http://www.personal.ceu.hu/tex/counters.htm 
%\addtocounter{chapter}{1}

\par A persistência da informação sempre foi essencial para diversos tipos
de aplicações. O grande volume de dados gerados por aplicações \textit{web},
juntamente com o elevado grau de disponibilidade e escalabilidade \footnote{Escalabilidade - é uma característica de um sistema que indica sua habilidade de manipular uma porção
crescente de trabalho de forma uniforme, ou estar preparado para crescer, otimizar os recursos, extrair o
máximo possível das máquinas.} que estas aplicações exigem, têm
contribuído para o surgimento de novas tecnologias de armazenamento de
dados.
Diversos tipos de aplicações \textit{web} requerem o gerenciamento de uma grande
quantidade de dados, que são gerados a cada minuto por bilhões de pessoas pelo mundo, que buscam compartilhar experiências, conhecimentos e
novidades. Com isso surgiu um novo paradigma de armazenamento de dados, o
NoSql\footnote{NoSQL (Not only SQL) - Não somente SQL.}, que tem como
objetivo principal atender às necessidades de gerenciamento de grandes volumes de dados de aplicações que necessitam de alta disponibilidade e escalabilidade.
Essa ideologia impulsionou o surgimento de novas técnicas de armazenamento, dentre elas
cita-se o \textit{Graph Database} que é baseado no modelo de grafo idealizado pelo matemático
suíço Leonhard Euller \cite{robinson2013graph}.

\par Existem três campos de conhecimento em que esse trabalho se enquadra: teoria dos
grafos, armazenamento de dados e desenvolvimento de \textit{software}. Unindo
essas três áreas, o trabalho propõe a criação de um sistema de recomendação de
filmes utilizando um \textit{Graph Database}.

\par Conforme descrito na obra de \citeonline{netto2006grafos}, a teoria
do grafos foi inicialmente descoberta no século XVIII por Euler\footnote{Leonhard Euler foi um
matemático suíço que fez enormes contribuições para a matemática e a física, 
incluindo geometria analítica, trigonometria, 
geometria, cálculo e teoria dos números.}, 
que formulou e resolveu o  primeiro problema de grafos, um caso isolado e sem
muita importância se levarmos em consideração a sua grande
obra científica. A teoria se desenvolveu muito tempo depois, em meados do
século XX, impulsionada principalmente pela invenção do computador que
viabilizava a resolução de diversos problemas. Hoje modelos de grafos podem ser
encontrados e aplicados em diversas áreas de conhecimento como na matemática,
computação, engenharia, sociologia e indústria. É importante salientar que,
diferente de outros ramos de estudo da matemática, que
tiveram início por teorias ou especulações, 
o estudo de grafos se originou com a solução de problemas práticos.

\par Neste trabalho, os conceitos de grafo são utilizados para
disponibilizar recomendações de filmes que condizem com o
perfil do usuário, através da utilização de um banco de dados que implementa
esses conceitos. Com isso, é necessário compreender a importância da
informação e como ela pode fazer com que o sistema proporcione uma melhor 
experiência para os usuários.

\par Um sistema de informação recebe uma entrada de dados, processa e tem como
saída uma informação. Os dados segundo \citeonline[p. 2]{goldschmidtdata} ``podem
ser interpretados como itens elementares, captados e armazenados por recursos de
Tecnologia da Informação''.
Já informação, segundo \citeonline[p. 2]{goldschmidtdata}, ``representa os
dados processados, com significado e contexto bem definido''. Seguindo esse
pensamento, os dados são considerados a matéria prima dos sistemas de
informação, que depois de processados geram informações para os usuários. Por este motivo é fundamental que os dados
sejam armazenados e que possam ser acessados a qualquer momento pelo
sistema, assim surgindo a necessidade do armazenamento de dados, que é gerenciado
por um Sistema de Gerenciamento de Banco de Dados (SGBD).

\par Segundo \citeonline[p. 1]{silberschatz1999sistema} ``um sistema gerenciador
de banco de dados é constituído por um conjunto de dados associados a um conjunto de programas para acesso a
esses dados''. Este sistema de banco de dados tem como finalidade
gerenciar todas as ações relacionadas à persistência de um dado em um
banco. Segundo \citeonline{silberschatz1999sistema} as principais características de um SGDB são:

\begin{itemize}
  \item controle de concorrência;
  \item segurança;
  \item recuperação de falhas;
  \item gerenciamento de mecanismos de armazenamento de dados;
  \item controle de restrições de integridade.
\end{itemize}

\par Dependendo da aplicação, pode haver uma variação na forma em que os dados
são armazenados e esta variação, principalmente pela expansão da \textit{web},
tem feito que os determinados SGBD's não atendam aos requisitos especificados
para o desenvolvimento destas aplicações. Esta evolução dos requisítos tem feito
com que grandes empresas desenvolvam soluções em gerenciamento e armazenamento
de dados que ofereçam o suporte necessário para que suas aplicações rodem em
ambientes extremos, sempre focando uma funcionalidade específica. Estas
soluções são classificadas como sendo bancos NoSQL.

\par Em sua dissertação \cite{santos_dissertacao} fez uma análise de diversas
soluções NoSQL a fim de usá-las em duas de suas aplicações, uma
\textit{desktop} e outra um \textit{web site}, que  pertenciam a dois clientes de sua empresa.
O projeto faz uma comparação das principais características encontradas nas 
implementações de banco analisadas, tendo como base os requisitos das suas
aplicações e visando não só otimizar os recursos de sua base de dados atual como também avaliar as novas soluções disponíveis no mercado. Assim,
o objetivo é contrapor as duas formas de armazenamento e verificar se o modelo
relacional é mais vantajoso e se uma mudança de paradigma melhoraria o serviço
disponibilizado, motivado pela inexistência de grandes estudos sobre as
diferentes abordagens dos SGBD não-relacionais. Seu projeto permite
conhecer as diferentes abordagens de SGBD.

\par Focando no conceito de NoSql, \citeonline{diana_gerosa}, diante da escassez de
materiais com recomendações, testes e explicações sobre o conceito, escreveram
um artigo que teve como objetivo investigar e testar bancos de dados NoSQL do
ponto de vista da escalabilidade e velocidade, e gerar recomendações sobre o
seu uso. No artigo é evidenciado o motivo pelo qual algumas grandes empresas da
\textit{web} desenvolveram soluções que utilizam conceitos de NoSQL e
apresentaram uma taxonomia dos principais modelos disponíveis.

\par Dentre as soluções disponíveis de bancos NoSQL, o banco utilizado no projeto foi o 
\textit{Graph Database}, visto
que ele oferece os recursos necessários para cumprir com os requisitos
do sistema proposto. O \textit{Graph Database} é uma ramificação do paradigma
NoSQL que tem como base a teoria dos grafos e, assim como os outros bancos
NoSQL, oferece uma série de benefícios que visam oferecer ao desenvolvedor de
\textit{software} uma nova perspectiva de desenvolvimento, em que não é preciso
adaptar o seu modelo para um banco relacional.

\par Por ser um banco que aplica os conceitos de grafos, a forma com que os
dados são armazenados faz com que uma consulta que custaria vários \textit{join's} em um banco relacional seja feita
de forma simples e rápida no banco orientado a grafos. Isso faz com que o desenvolvimento de um
\textit{\textit{software}} em que os dados sejam ricos em conexões se torne menos
complicado. Mas assim como toda ferramenta nova, este modelo de banco de dados
precisa ser analisado e testado por meio de aplicações que realmente extraiam
todo o seu potencial e façam com que suas principais funcionalidades sejam
exploradas. Dentre as implementações de \textit{Graph Databases} disponíveis, o
escolhido para este trabalho foi o Neo4j, que é uma importante e
reconhecida implementação do modelo e será descrito no capítulo 2.

\par O presente trabalho tem como objetivo geral analisar e aplicar os conceitos
de \textit{Graph Database}, através de um \textit{software} para recomendação de
filmes em uma locadora, de forma que esse conteúdo possa ser inserido no
contexto acadêmico e possa servir como base de pesquisa para essa nova
tecnologia no âmbito institucional e social.

\par Para sua realização foram colocados os seguintes objetivos
específicos:

\begin{itemize}
  \item Analisar os conceitos de teoria dos grafos;
  \item Entender como persistir um grafo utilizando o \textit{Graph Database} Neo4j;
  \item Desenvolver um \textit{software} para uma locadora de filmes que utilize
  o \textit{Graph Database} Neo4j para fornecer informações para recomendação
  de filmes.
\end{itemize}

\par O \textit{Graph Databases}, assim como a teoria dos grafos, é um assunto
pouco recorrente em trabalhos acadêmicos, principalmente no âmbito nacional.
Com isso, o trabalho tende a oferecer à academia e à sociedade uma ferramenta
alternativa para armazenamento de dados que atende a requisitos onde os dados
são altamente interligados, aumentando as condições de se obter um ambiente
compatível, estável e seguro além de contribuir para a composição de uma boa arquitetura de \textit{software}.

\par Um dos exemplos de trabalhos utilizando a teoria dos grafos e banco de 
 dados orientados a grafos, foi o trabalho elaborado por
 \citeonline{roberto_2013}, onde foi definida uma arquitetura de \textit{software} 
 que permite a execução de algoritmos de particionamento de grafos utilizando 
 a estrutura do grafo em memória ou no banco de dados Neo4J. Sendo
 este um trabalho de referência que utiliza vários conceitos que serão abordados
 nesta pesquisa.


\par Este trabalho está organizado em 4 capítulos. O Capítulo 2 apresenta o
quadro teórico, onde as tecnologias utilizadas são apresentadas e fundamentadas.
O Capítulo 3 detém o quadro metodológico, onde são apresentados todos os
passos necessários para o planejamento e elaboração do \textit{software}. No Capítulo 4
se encontra a discussão dos resultados obtidos com o projeto com base nas
tecnologias utilizadas. E finalmente no Capítulo 5, a conclusão do trabalho.